/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formularze;

import bazy.HibernateUtil;
import bazy.LogiZmian;
import bazy.Statusy;
import bazy.Uzytkownicy;
import bazy.Zalaczniki;
import bazy.Zamowienia;
import java.util.Date;
import org.hibernate.Session;

/**
 * Klasa bazowa dla formularzy.
 * @author Grzesiek
 */
public abstract class Formularz {

    public Formularz() {
    }

    /**
     * Zmiana statusu zamówienia oraz dopisanie do tabeli z logami inforamcji o zdarzeniu.
     * @param id_zamow dla jakiego zamowienia nastépuje zmiana statusu
     * @param status id nowego statusu
     * @param id_zmieniajacego kto zmienia status
     */
    public void zmien_status(int id_zamow, int status, int id_zmieniajacego) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Statusy pom_stat = (Statusy) session.load(Statusy.class, status);
        Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zamow);
        Uzytkownicy uz = (Uzytkownicy) session.load(Uzytkownicy.class, id_zmieniajacego);
        LogiZmian pom_lz = new LogiZmian(uz, zam, zam.getStatusy().getNazwaStatusu(), pom_stat.getNazwaStatusu(), new Date());
        session.save(pom_lz);
        zam.setStatusy(pom_stat);
        session.update(zam);
        tx.commit();
        session.close();
    }

    /**
     * Pobranie statusu dla żądanego zamówienia.
     * @param id_zamow id zamówienia którego status chcemy pobrać
     * @return id statusu
     */
    public int get_status(int id_zamow) {
        int status;
        Statusy st;
        Session session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zamow);
        st = zam.getStatusy();
        session.update(zam);
        tx.commit();
        status = st.getIdstatusy();
        session.close();
        return status;
    }

    /**
     * Usunięcie załącznika z formularza (z bazy).
     * @param zal
     */
    public void usun_zalacznik(Zalaczniki zal) {
        Session session = HibernateUtil.getSessionFactory().openSession();

        org.hibernate.Transaction tx = session.beginTransaction();
        Zalaczniki pom_zal = (Zalaczniki) session.load(Zalaczniki.class, zal.getIdzalaczniki());
        session.delete(pom_zal);
        tx.commit();
        session.close();

    }

    /**
     * Usunięcie formularza z bazy.
     * @param id
     */
    public abstract void usun(int id);
}
